"""
类属性:
直接在类里面定义的属性叫做类属性

类方法:
    1 在类中定义的方法
    2 被@classmethod 所修饰的方法叫做类方法
    3 这个方法的第一个参数是cls
类外调用:

类内调用:
类方法是否可以调用
    成员属性   无法调用
    成员方法   无法调用
    类属性:   # cls.类属性名来调用
    类方法:      # 通过cls来调用类方法
成员方法可以调用类属性类方法
"""
class Dog:
    name="小白"  #类属性
    def __init__(self):
        self.age=10
    #类方法
    @classmethod     #装饰器 ---->底层闭包(函数里面套函数)
    def eat(cls):
        print(cls.name)     # 通过cls来调用类属性
        cls.sleep()  # 通过cls来调用类方法
        # cls.age  类方法调用不了成员属性,成员方法
        # cls.he()   #类方法调用不了成员方法

    def he(self):
        print(f"喝水{self.age}")
        print(self.name) #成员方法可以调用类属性
        self.sleep()    #成员方法可以调用类方法
    @classmethod
    def sleep(cls):  #cls 指向的是类,并不是某个对象
        print("睡觉")

d1=Dog()
# d1.he()

# 类外:
# 第一种调用方式:   推荐的
# 语法: 类名.类方法/类属性
# Dog.sleep()
# 第二种方式   对象名.类方法/类属性   不推荐
d1.sleep()




